"""
类视图设置装饰器
    通过 method_decorators类属性 来设置类视图的装饰器
    该属性接收两种类型数据:
        列表形式: 所有请求方式都会使用列表中的装饰器
        字典形式: 给请求方式分别设置装饰器
"""
from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
# 1. 创建API对象  用于管理类视图(资源)
api = Api(app)


def deco1(f):
    def wrapper(*args, **kwargs):
        print('deco1')
        return f(*args, **kwargs)

    return wrapper


def deco2(f):
    def wrapper(*args, **kwargs):
        print('deco2')
        return f(*args, **kwargs)

    return wrapper


# 2.定义类视图  继承Resource
class DemoResource(Resource):
    # 通过method_decorators类属性来设置类视图的装饰器
    # 列表形式 所有请求方式都会使用
    # method_decorators = [deco1, deco2]
    # 字典形式 给请求方式分别设置装饰器
    method_decorators = {'get': [deco1], 'post': [deco2]}

    def get(self):
        # 类视图响应的content-type默认变为json形式
        # 类视图的返回值可以是字典, 会被自动转为json字符串
        return {'foo': 'get'}

    def post(self):
        return {'foo': 'post'}


# 3.添加类视图  函数标记默认为类名小写,endpoint修改函数标记
api.add_resource(DemoResource, '/', endpoint='demo')

if __name__ == '__main__':
    app.run(debug=True)
